
//====================================================================
//
// 文件: CvxText.h
//
// 说明: OpenCV汉字输出
//
//====================================================================

#ifndef OPENCV_CVX_TEXT_2016_NEW_H
#define OPENCV_CVX_TEXT_2016_NEW_H

/**
* \file CvxText.h
* \brief OpenCV汉字输出接口
*
* 实现了汉字输出功能。
*/

#include <ft2build.h>
#include FT_FREETYPE_H

#include "opencv2/opencv.hpp"
using namespace cv;

class CvxText
{
    CvxText& operator=(const CvxText&);

public:
    CvxText(const char *freeType);
    virtual ~CvxText();

    /**
    * 获取字体。目前有些参数尚不支持。
    *
    * \param font        字体类型, 目前不支持
    * \param size        字体大小/空白比例/间隔比例/旋转角度
    * \param underline   下画线
    * \param diaphaneity 透明度
    *
    * \sa setFont, restoreFont
    */
    void getFont(int *type, Scalar *size=NULL, bool *underline=NULL, float *diaphaneity=NULL);

    /**
    * 设置字体。目前有些参数尚不支持。
    *
    * \param font        字体类型, 目前不支持
    * \param size        字体大小/空白比例/间隔比例/旋转角度
    * \param underline   下画线
    * \param diaphaneity 透明度
    *
    * \sa getFont, restoreFont
    */
    void setFont(int *type, Scalar *size=NULL, bool *underline=NULL, float *diaphaneity=NULL);

    /**
    * 恢复原始的字体设置。
    *
    * \sa getFont, setFont
    */
    void restoreFont();


    /**
    * 输出汉字(颜色默认为黑色)。遇到不能输出的字符将停止。
    *
    * \param img  输出的影象
    * \param text 文本内容
    * \param pos  文本位置
    *
    * \return 返回成功输出的字符长度，失败返回-1。
    */
    int putText(Mat img, const char *text, Point pos);

    /**
    * 输出汉字(颜色默认为黑色)。遇到不能输出的字符将停止。
    *
    * \param img  输出的影象
    * \param text 文本内容
    * \param pos  文本位置
    *
    * \return 返回成功输出的字符长度，失败返回-1。
    */
    int putText(Mat img, const wchar_t *text, Point pos);

    /**
    * 输出汉字。遇到不能输出的字符将停止。
    *
    * \param img   输出的影象
    * \param text  文本内容
    * \param pos   文本位置
    * \param color 文本颜色
    *
    * \return 返回成功输出的字符长度，失败返回-1。
    */
    int putText(Mat img, const char *text, Point pos, Scalar color);

    /**
    * 输出汉字。遇到不能输出的字符将停止。
    *
    * \param img   输出的影象
    * \param text  文本内容
    * \param pos   文本位置
    * \param color 文本颜色
    *
    * \return 返回成功输出的字符长度，失败返回-1。
    */
    int putText(Mat img, const wchar_t *text, Point pos, Scalar color);
    /**
     * 计算文字的宽高
     * @param img
     * @param text
     * @return
     */
    Size getTextSize(const wchar_t *text);

private:
    // 输出当前字符, 更新m_pos位置
    void putWChar(Mat img, wchar_t wc, Point &pos, Scalar color);


private:
    FT_Library   m_library;   // 字库
    FT_Face      m_face;      // 字体

    // 默认的字体输出参数
    int          m_fontType;
    Scalar       m_fontSize;
    bool         m_fontUnderline;
    float        m_fontDiaphaneity;
};

#endif // OPENCV_CVX_TEXT_2007_08_31_H</ft2build.h>
